from sparkai.llm.llm import ChatSparkLLM
from sparkai.core.messages import ChatMessage
from typing import List, Dict
import os


class SecondhandSparkBot:
    def __init__(self):
        # 修正API地址（移除多余空格）
        self.spark = ChatSparkLLM(
            spark_api_url='wss://spark-api.xf-yun.com/v3.5/chat',  # 修正空格问题
            spark_app_id="a02d1881",
            spark_api_key="f6a486082e4ff9ba039818e98a667c65",
            spark_api_secret="NTAxMjM5MjI2MmQ0MmE0OGE2ZGMwZGJj",
            spark_llm_domain='generalv3.5',
            streaming=False
        )

        # 强化系统提示词
        self.system_prompt = """[角色设定]
                                您作为二手交易平台的专业客服助手，需严格遵守以下规则：
                                
                                [核心功能]
                                1. 商品咨询：准确描述商品状态（九成新/轻微使用痕迹等），提供详细规格参数
                                2. 价格指导：参考市场价±15%范围给出建议，格式示例：【建议价格：¥2500-2800】
                                3. 交易流程：分步骤说明平台交易流程，强调安全注意事项
                                4. 安全提醒：发现外部联系方式立即终止对话
                                
                                [响应要求]
                                - 回复内容简洁，不超过200字
                                - 商品型号用【】包裹，例如：iPhone13 Pro
                                - 价格范围使用【¥数字】标注
                                """

        # 初始化对话历史
        self.conversation_history = [
            ChatMessage(role="system", content=self.system_prompt)
        ]

    def _filter_sensitive(self, text: str) -> str:
        """敏感词过滤"""
        sensitive_keywords = ["微信", "QQ", "支付宝", "线下"]
        for keyword in sensitive_keywords:
            if keyword in text:
                return "根据平台规则，请使用官方沟通渠道"
        return text

    def ask(self, user_input: str) -> str:
        try:
            # 添加用户消息
            self.conversation_history.append(
                ChatMessage(role="user", content=user_input)
            )

            # 调用API
            response = self.spark.generate([self.conversation_history])
            ai_reply = response.generations[0][0].text

            # 处理回复
            filtered_reply = self._filter_sensitive(ai_reply)
            formatted_reply = f"{filtered_reply}\n\n如需人工服务请回复【转人工】"

            # 更新历史记录
            self.conversation_history.append(
                ChatMessage(role="assistant", content=formatted_reply)
            )

            # 保持历史长度
            if len(self.conversation_history) > 11:  # system + 5轮对话
                self.conversation_history = [
                    self.conversation_history[0],
                    *self.conversation_history[-10:]
                ]

            return formatted_reply

        except Exception as e:
            print(f"[API ERROR] {str(e)}")
            return "服务暂时不可用，请稍后再试"


# # 使用示例
# if __name__ == "__main__":
#     # 配置环境变量（实际部署时应使用保密管理）
#     os.environ["SPARK_APP_ID"] = "a02d1881"
#     os.environ["SPARK_API_KEY"] = "f6a486082e4ff9ba039818e98a667c65"
#     os.environ["SPARK_API_SECRET"] = "NTAxMjM5MjI2MmQ0MmE0OGE2ZGMwZGJj"
#
#     bot = SecondhandSparkBot()
#
#     # 测试对话
#     queries = [
#         "我看到的iPhone13价格能再便宜吗？",
#     ]
#
#     for q in queries:
#         print(f"用户提问：{q}")
#         response = bot.ask(q)
#         print(f"客服回复：{response}\n{'=' * 30}")